php-fpm配置文件 高并发参数配置及linux内核参数优化

         之前给出了 php-fpm.conf 的内容,下面给出一个模版,配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
[www]
listen = /tmp/php-fcgi.sock
user = php-fpm
group = php-fpm
listen.owner = nobody #和后面的nginx一致
listen.group = nobody #同上
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 1024

        说明:

        [global] 部分是全局配置,指定 pid 文件路径以及 error_log 路径。

        [www] 是一个 pool ,还可以再写第二个 pool ,第二个 pool 和第一个不易演的的地方,首先 pool 的 name ,比如叫做 [www2] 。然后 listen 肯定就不能一样了,比如 可以 listen = /tmp/php-fcgi2.sock 。而 user , group 也可以和 [www] 中定义的不一样。 listen.owner 这个是定义 /tmp/php-fcgi2.sock 这个文件的所有者是谁,在 php5.4 版本之后监听的 socket 文件权限默认变成了 600,如果不定义 listen.owner 那么 nginx 调用这个 socket 的时候就没有权限了,所以在这里定义 listen.owner 为 nginx 的子进程监听用户。

        pm = dynamic 表示以动态的形式启动,在 php5.3 版本以后它可以支持动态和静态了,如果是静态,即 pm = static 时,下面的配置只有 pm.max.children 管用。

        pm.max.children 表示启动几个 php-fpm 的子进程。如果是 dynamic ,下面的配置会生效,pm.max.children 表示最大可以启动几个子进程。

        pm.start_servers 表示一开始启动几个子进程。

        pm.max_requeste 表示一个子进程最多可以接受多少个请求,比如设置为500那么一个子进程手里500个请求后自动销毁。

        rlimit_files 表示每个子进程打开的多少个文件句柄。

1
2
slowlog = /tmp/www_slow.log
request_slowlog_timeout = 1

        表示一个脚本执行时间超过 1秒就要记录这个slow.log ,记录这个可以看到这个脚本哪里执行慢,可以通过slow.log排查网站慢的原因,根据这个原因做一定的优化。

1
php_admin_value [open_basedir] = /data/www/:/tmp

        apache 可以设置 open_basedir ,php-fpm也可以,不同的 pool 设置不同的 open_basedir 可以针对不同的域名进行不同的限制。多个目录用 :分割。